package jp.co.toshiba.ffsa.action.cses;

import java.util.ArrayList;
import java.util.LinkedHashMap;

import javax.annotation.Resource;

import jp.co.toshiba.ffsa.action.common.CommonAction;
import jp.co.toshiba.ffsa.common.ListBox;
import jp.co.toshiba.ffsa.dto.LoginDto;
import jp.co.toshiba.ffsa.form.cses.Cses101Form;
import jp.co.toshiba.ffsa.service.common.CommonService;
import jp.co.toshiba.ffsa.service.common.ConstantValue;
import jp.co.toshiba.ffsa.service.cses.Cses101Service;

import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;
import org.seasar.struts.util.MessageResourcesUtil;
import org.seasar.struts.util.RequestUtil;

/**
 * 簡易(最小入力)
 * @author npc
 */
public class Cses101Action extends CommonAction {
    /** 画面ID */
    public String screenID = "CSES101";

    /** アクションフォーム */
    @ActionForm
    @Resource
    protected Cses101Form cses101Form;

    /** FPGAメーカー名リストボックス作成用 */
    public LinkedHashMap<String, String> fpgaMakerList = new LinkedHashMap<String, String>();

    /** FPGAシリーズ名リストボックス作成用 */
    public LinkedHashMap<String, String> fpgaSeriesList = new LinkedHashMap<String, String>();

    /** FPGA型名リストボックス作成用 */
    public LinkedHashMap<String, String> fpgaModelList = new LinkedHashMap<String, String>();

    /** PKG-typeリストボックス作成用 */
    public LinkedHashMap<String, String> pkgTypeList = new LinkedHashMap<String, String>();

    /** Quantityリストボックス作成用 */
    public LinkedHashMap<String, String> quantityList = new LinkedHashMap<String, String>();

    /** メールアドレス */
    public String mailAddress = "";

    /** 価格 */
    public String price = "";
    /** 価格が見つからなかった場合のメッセージ */
    public String contactMessage = "";

    /**
     * 初期処理
     * @return 画面遷移先
     * @throws Exception
     */
    @Execute(validator = false)
    public String index() throws Exception {

        try {
            // ログイン済判定
            if( !judgeLogin(cses101Form.getSessionId()) ){
                return topTransition;
            }

            // リファラ判定
            if( !judgeRefferer() ){
                return topTransition;
            }

            // メールアドレス取得
            getMailAddress();

            // リストボックス作成
            getListBox();

        } catch (Exception e) {
            // ログ出力
            errorLogWriter(e, "index", screenID);
            throw e;
        }
        return "/cses/cses101.jsp";

    }

    /**
     * 見積処理
     * @return 画面遷移先
     * @throws Exception
     */
    @Execute(validator = true, input="/cses/cses101/error")
    public String submit() throws Exception {

        try {
            // ログイン済判定
            if( !judgeLogin(cses101Form.getSessionId()) ){
                return topTransition;
            }

            // リファラ判定
            if( !judgeRefferer() ){
                return topTransition;
            }

            // メールアドレス取得
            getMailAddress();

            // リストボックス作成
            getListBox();

            Cses101Service service = new Cses101Service();

            // サービスにフォームの入力値をセット
            service.setFpgaMaker(cses101Form.fpgaMaker);
            service.setFpgaSeries(cses101Form.fpgaSeries);
            service.setFpgaModel(cses101Form.fpgaModel);
            service.setPkgType(cses101Form.pkgTypeS);
            service.setQuantity(cses101Form.quantityS);

            // 価格取得
            price = service.getPrice();
            contactMessage = service.getContactMessage();

            // 操作ログ登録
            ArrayList<ArrayList<String>> parameters = new ArrayList<ArrayList<String>>();
            ArrayList<String> parameterNames = new ArrayList<String>();
            ArrayList<String> values = new ArrayList<String>();
            parameterNames.add(MessageResourcesUtil.getMessage("total"));
            values.add(price);
            parameterNames.add(MessageResourcesUtil.getMessage("fpga_maker"));
            values.add(cses101Form.fpgaMaker);
            parameterNames.add(MessageResourcesUtil.getMessage("fpga_series"));
            values.add(cses101Form.fpgaSeries);
            parameterNames.add(MessageResourcesUtil.getMessage("fpga_model"));
            values.add(cses101Form.fpgaModel);
            parameterNames.add(MessageResourcesUtil.getMessage("pkg_type"));
            values.add(cses101Form.pkgTypeS);
            parameterNames.add(MessageResourcesUtil.getMessage("quantity"));
            values.add(cses101Form.quantityS);
            parameterNames.add(MessageResourcesUtil.getMessage("use_for"));
            values.add(cses101Form.useForS);
            parameterNames.add(MessageResourcesUtil.getMessage("development_schedule"));
            values.add(cses101Form.developmentScheduleS);
            parameterNames.add(MessageResourcesUtil.getMessage("target_nre"));
            values.add(cses101Form.targetNreS);
            parameterNames.add(MessageResourcesUtil.getMessage("target_price"));
            values.add(cses101Form.targetPriceS);
            parameterNames.add(MessageResourcesUtil.getMessage("ip"));
            values.add(cses101Form.ipS);
            parameters.add(parameterNames);
            parameters.add(values);
            entryOperationHistory(screenID, "submit", parameters, ConstantValue.success);

        } catch (Exception e) {
            // ログ出力
            errorLogWriter(e, "index", screenID);
            throw e;
        }
        return "/cses/cses101.jsp";

    }

    /**
     * 初期化処理
     * @return 画面遷移先
     * @throws Exception
     */
    @Execute(validator = false)
    public String clear() throws Exception {

        try {
            // ログイン済判定
            if( !judgeLogin(cses101Form.getSessionId()) ){
                return topTransition;
            }

            // リファラ判定
            if( !judgeRefferer() ){
                return topTransition;
            }

            // フォーム初期化
            cses101Form.reset();

            // メールアドレス取得
            getMailAddress();

            // リストボックス作成
            getListBox();

        } catch (Exception e) {
            // ログ出力
            errorLogWriter(e, "clear", screenID);
            throw e;
        }
        return "/cses/cses101.jsp";

    }

    /**
     * バリデーションエラー処理
     * @return 遷移先
     * @throws Exception
     */
    @Execute(validator = false)
    public String error() throws Exception{
        return index();
    }

    /**
     * メールアドレス取得
     * @throws Exception
     */
    public void getMailAddress() throws Exception {
        CommonService service = new CommonService();

        // ユーザID取得
        String userId = ((LoginDto)RequestUtil.getRequest().getSession().getAttribute("login_dto")).getUserID();

        // メールアドレス取得
        mailAddress = service.getUserInfo(userId).mailAddress;
    }

    /**
     * リストボックス作成
     * @throws Exception
     */
    public void getListBox() throws Exception {
        ListBox listbox = new ListBox();

        fpgaMakerList  = listbox.getFpgaMakerListBox();                         // FPGAメーカー名リストボックス
        fpgaSeriesList = listbox.getFpgaSeriesListBox(cses101Form.fpgaMaker);   // FPGAシリーズ名リストボックス
        fpgaModelList  = listbox.getFpgaModelListBox(cses101Form.fpgaMaker, cses101Form.fpgaSeries);   // FPGA型名リストボックス
        pkgTypeList    = listbox.getPkgTypeListBox(cses101Form.fpgaMaker, cses101Form.fpgaSeries, cses101Form.fpgaModel);      // PKG-typeリストボックス
        quantityList   = listbox.getQuantityListBox();                          // Quantityリストボックス
    }
}